﻿using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Service.Security.Services;
using Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.ServiceContract;

namespace Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.ServiceImplementation
{
    [SinacorServiceBehavior]
    public class Bloqueio : IBloqueio
    {
        #region Campos

        private BusinessLogic.Bloqueio blBloqueio;
        private Translator.BusinessEntityToDataContract.Bloqueio beToDcBloqueio;
        private Translator.DataContractToBusinessEntity.Bloqueio dcToBeBloqueio;

        #endregion

        #region Construtor

        /// <summary>
        /// Construtor padrão
        /// </summary>
        public Bloqueio()
        {
            this.blBloqueio = new Sinacor.Servico.Bovespa.ManutencaoOrdens.BusinessLogic.Bloqueio();
            this.beToDcBloqueio = new Translator.BusinessEntityToDataContract.Bloqueio();
            this.dcToBeBloqueio = new Translator.DataContractToBusinessEntity.Bloqueio();
        }

        #endregion

        #region IBloqueio Members

        /// <summary>
        /// Altera informações de um bloqueio
        /// </summary>
        /// <param name="request"></param>
        /// <tables>TORBLOQUEIO</tables>
        public void AlterarBloqueio(Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.DataContract.Request.BloqueioRequest request)
        {
            this.blBloqueio.AlterarBloqueio(this.dcToBeBloqueio.ToBloqueio(request));
        }

        /// <summary>
        /// Consulta uma lista de bloqueios conforme filtro de pesquisa
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        /// <tables>TORBLOQUEIO</tables>
        public List<Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.DataContract.Response.BloqueioResponse> ConsultarBloqueios(Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.DataContract.Request.FiltroBloqueioRequest request)
        {
            return this.beToDcBloqueio.ToBloqueioResponse
                (
                    this.blBloqueio.ConsultarBloqueios(this.dcToBeBloqueio.ToFiltroBloqueio(request))
                );
        }

        /// <summary>
        /// Excluir um bloqueio
        /// </summary>
        /// <param name="request"></param>
        /// <tables>TORBLOQUEIO</tables>
        public void ExcluirBloqueio(Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.DataContract.Request.FiltroBloqueioChaveRequest request)
        {
            this.blBloqueio.ExcluirBloqueio(this.dcToBeBloqueio.ToFiltroBloqueioChave(request));
        }

        /// <summary>
        /// Inclui um novo bloqueio
        /// </summary>
        /// <param name="request"></param>
        /// <tables>TORBLOQUEIO</tables>
        public void IncluirBloqueio(Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.DataContract.Request.BloqueioRequest request)
        {
            this.blBloqueio.IncluirBloqueio(this.dcToBeBloqueio.ToBloqueio(request));
        }

        /// <summary>
        /// Obtem um bloqueio conforme o filtro chave
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        /// <tables>TORBLOQUEIO</tables>
        public Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.DataContract.Response.BloqueioResponse ObterBloqueio(Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.DataContract.Request.FiltroBloqueioChaveRequest request)
        {
            return this.beToDcBloqueio.ToBloqueioResponse
                (
                    this.blBloqueio.ObterBloqueio(this.dcToBeBloqueio.ToFiltroBloqueioChave(request))
                );
        }

        #endregion
    }
}
